#include "mux.h"

void SwitchOn(uint32_t channel)
{
    if (channel > 16)
    {
        return; // 超过最大通道数
    }

#ifdef FINGER_UP
    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_10 | GPIO_PIN_9 | GPIO_PIN_8 | GPIO_PIN_15, GPIO_PIN_RESET); // PA10, PA11, PA12, PA13
    // 先将所有引脚置为低电平
    if (channel & 1)
    {
        HAL_GPIO_WritePin(GPIOA, GPIO_PIN_10, GPIO_PIN_SET); // PA10
    }
    else
    {
        HAL_GPIO_WritePin(GPIOA, GPIO_PIN_10, GPIO_PIN_RESET); // PA10
    }
    channel = channel >> 1; // 右移一位, 只保留低4位
    if (channel & 1)
    {
        HAL_GPIO_WritePin(GPIOA, GPIO_PIN_9, GPIO_PIN_SET); // PA11
    }
    else
    {
        HAL_GPIO_WritePin(GPIOA, GPIO_PIN_9, GPIO_PIN_RESET); // PA11
    }
    channel = channel >> 1; // 右移一位, 只保留低4位
    if (channel & 1)
    {
        HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8, GPIO_PIN_SET); // PA12
    }
    else
    {
        HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8, GPIO_PIN_RESET); // PA12
    }
    channel = channel >> 1; // 右移一位, 只保留低4位
    if (channel & 1)
    {
        HAL_GPIO_WritePin(GPIOA, GPIO_PIN_15, GPIO_PIN_SET); // PA13
    }
    else
    {
        HAL_GPIO_WritePin(GPIOA, GPIO_PIN_15, GPIO_PIN_RESET); // PA13
    }
#endif
#if defined FINGER_MID || defined FINGER_DOWN
    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_15, GPIO_PIN_RESET); // PA15
    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3 | GPIO_PIN_4 | GPIO_PIN_5, GPIO_PIN_RESET); // PB3, PB4, PB5
    // 先将所有引脚置为低电平
    if (channel & 1)
    {
        HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, GPIO_PIN_SET); // PB3
    }
    else
    {
        HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, GPIO_PIN_RESET); // PB3
    }
    channel = channel >> 1; // 右移一位, 只保留低4位
    if (channel & 1)
    {
        HAL_GPIO_WritePin(GPIOB, GPIO_PIN_4, GPIO_PIN_SET); // PB4
    }
    else
    {
        HAL_GPIO_WritePin(GPIOB, GPIO_PIN_4, GPIO_PIN_RESET); // PB4
    }
    channel = channel >> 1; // 右移一位, 只保留低4位
    if (channel & 1)
    {
        HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3, GPIO_PIN_SET); // PB5
    }
    else
    {
        HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3, GPIO_PIN_RESET); // PB5
    }
    channel = channel >> 1; // 右移一位, 只保留低4位
    if (channel & 1)
    {
        HAL_GPIO_WritePin(GPIOA, GPIO_PIN_15, GPIO_PIN_SET); // PA15
    }
    else
    {
        HAL_GPIO_WritePin(GPIOA, GPIO_PIN_15, GPIO_PIN_RESET); // PA15
    }
    
#endif
#ifdef PALM

#endif
}